package com.py.credit.service.impl;

import com.py.credit.dao.LhjcDataCheckDao;
import com.py.credit.dao.LhjcDataInsertDao;
import com.py.credit.entity.LhjcCube;
import com.py.credit.entity.LhjcRecordMd5;
import com.py.credit.entity.LhjcZooControl;
import com.py.credit.service.LhjcDataInsertService;
import com.py.credit.service.LhjcRemoteBaseService;
import com.py.credit.utils.MD5Util;
import com.py.credit.utils.UuidUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.*;

@Service
public class LhjcDataInsertServiceImpl implements LhjcDataInsertService {

    @Autowired
    private LhjcDataInsertDao lhjcDataInsertDao;

    @Autowired
    private LhjcDataCheckDao lhjcDataCheckDao;

    @Autowired
    private LhjcRemoteBaseService lhjcRemoteBaseService;

    @Override
    public void addData(List<Map<String, Object>> listDataMap, LhjcCube cube, String batchId) {
        // TODO Auto-generated method stub
        if (listDataMap == null || listDataMap.size() < 1) {
            return;
        }

        Set<String> csSet = new HashSet<String>();

        List<LhjcRecordMd5> recordMd5s = new ArrayList<LhjcRecordMd5>();

        List<LhjcZooControl> controlData = new ArrayList<LhjcZooControl>();

        LhjcZooControl zooControl = new LhjcZooControl();

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        for (Map<String, Object> mapData : listDataMap) {
            StringBuilder data = new StringBuilder();
//			List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
            LhjcRecordMd5 recordMd5 = new LhjcRecordMd5();
            Map<String, Object> valueMap = new HashMap<String, Object>();

            String recordId = UuidUtil.getInstance().getUUid();

            if (cube.getCubeId() == 1002) {
                //如果是多行同一个事由以及规则，只插入一次
                data.append(mapData.get("bm"));
                if (!csSet.contains((String) mapData.get("record"))) {
                    csSet.add((String) mapData.get("record"));
                    StringBuilder gzSql = new StringBuilder();

                    gzSql.append("insert into lhjc_gz(name,bm,detailName,cfbm,jclb) values( '");
                    gzSql.append(mapData.get("name") + "','" + mapData.get("bm") + "','" + mapData.get("detailName") + "','" + mapData.get("cfbm") + "','" + mapData.get("jclb") + "')");
                    lhjcDataInsertDao.addBatchData(gzSql.toString());
                }

                //插入措施
                StringBuilder csSql = new StringBuilder();
                StringBuilder relationSql = new StringBuilder();
                StringBuilder relationSql1 = new StringBuilder();
                String remark = (String) mapData.get("remark");
                String csId1 = lhjcDataInsertDao.selectCsByRemark(remark);
                String bm = (String) mapData.get("bm");
                String gzId = lhjcDataInsertDao.selectGzByBm(bm);

                if (csId1 != null && !mapData.get("deptId").equals("-1")) {
                    if(lhjcDataInsertDao.selectGzCsExist(gzId,csId1, (String) mapData.get("deptId"))<1){
                        relationSql.append("insert into lhjc_gz_cs(gzId,csId,deptId) values('");
                        relationSql.append(gzId + "','" + csId1 + "','" + mapData.get("deptId") + "')");
                        lhjcDataInsertDao.addBatchData(relationSql.toString());
                    }
                } else {
                    String id = UuidUtil.getInstance().getUUid();
                    String csType = "P";

                    if (mapData.get("deptId").equals("-1")) {
                        csType = "G";
                    }

                    if (csId1 != null) {
                        if(lhjcDataInsertDao.selectGzCsExist(gzId,csId1, (String) mapData.get("deptId"))<1){
                            relationSql.append("insert into lhjc_gz_cs(gzId,csId,deptId) values('");
                            relationSql.append(gzId + "','" + csId1 + "','" + mapData.get("deptId") + "')");
                            lhjcDataInsertDao.addBatchData(relationSql.toString());
                        }
                    } else {
                        csSql.append(" insert into lhjc_cswh(id,cs,remark,yj,jczt,csbm,jclb,csType,cssdValue) values( '");
                        csSql.append(id + "','" + mapData.get("cs") + "','" + mapData.get("remark") + "','" + mapData.get("csyj") + "','" + mapData.get("jczt") + "','" + mapData.get("csbm") + "','" + mapData.get("jclb") + "','" + csType + "','" + lhjcRemoteBaseService.getDictByDtlKey("CSSD", (String) mapData.get("cs")).getData().getDtlValue() + "')");
                        lhjcDataInsertDao.addBatchData(csSql.toString());
                        String csId = lhjcDataInsertDao.selectCsByRemark(remark);
                        relationSql.append("insert into lhjc_gz_cs(gzId,csId,deptId) values('");
                        relationSql.append(gzId + "','" + csId + "','" + mapData.get("deptId") + "')");
                        lhjcDataInsertDao.addBatchData(relationSql.toString());
                        relationSql1.append("insert into lhjc_cs_dept(csId,deptId) values('");
                        relationSql1.append(csId + "','" + mapData.get("deptId") + "')");
                        lhjcDataInsertDao.addBatchData(relationSql1.toString());
                    }
                }
            }

            if (cube.getCubeId() == 1003) {
                //插入措施
                StringBuilder csSql = new StringBuilder();
                StringBuilder relationSql = new StringBuilder();
                String remark = (String) mapData.get("remark");
                String csId1 = lhjcDataInsertDao.selectCsByRemark(remark);

                if (csId1 != null && !mapData.get("deptId").equals("-1")) {
                    if(lhjcDataInsertDao.selectDeptCsExist(csId1, (String) mapData.get("deptId"))<1){
                        relationSql.append("insert into lhjc_cs_dept(csId,deptId) values('");
                        relationSql.append(csId1 + "','" + mapData.get("deptId") + "')");
                        lhjcDataInsertDao.addBatchData(relationSql.toString());
                    }
                } else {
                    String id = UuidUtil.getInstance().getUUid();
                    String csType = "P";

                    if (mapData.get("deptId").equals("-1")) {
                        csType = "G";
                    }

                    if (csId1 != null) {
                        if(lhjcDataInsertDao.selectDeptCsExist(csId1, (String) mapData.get("deptId"))<1){
                            relationSql.append("insert into lhjc_cs_dept(csId,deptId) values('");
                            relationSql.append(csId1 + "','" + mapData.get("deptId") + "')");
                            lhjcDataInsertDao.addBatchData(relationSql.toString());
                        }
                    } else {
                        csSql.append(" insert into lhjc_cswh(id,cs,remark,yj,jczt,csbm,jclb,csType,cssdValue) values( '");
                        csSql.append(id + "','" + mapData.get("cs") + "','" + mapData.get("remark") + "','" + mapData.get("yj") + "','" + mapData.get("jczt") + "','" + mapData.get("csbm") + "','" + mapData.get("jclb") + "','" + csType + "','" + lhjcRemoteBaseService.getDictByDtlKey("CSSD", (String) mapData.get("cs")).getData().getDtlValue() + "')");
                        lhjcDataInsertDao.addBatchData(csSql.toString());

                        String csId = lhjcDataInsertDao.selectCsByRemark(remark);
                        relationSql.append("insert into lhjc_cs_dept(csId,deptId) values('");
                        relationSql.append(csId + "','" + mapData.get("deptId") + "')");
                        lhjcDataInsertDao.addBatchData(relationSql.toString());
                    }
                }
            }

            if (cube.getCubeId() == 1004) {
                //插入措施
                StringBuilder csSql = new StringBuilder();
                StringBuilder relationSql = new StringBuilder();
                String lybm = (String) mapData.get("lyId");
                String lyId = lhjcDataInsertDao.selectLyByBm(lybm);
                String remark = (String) mapData.get("remark");
                String csId1 = lhjcDataInsertDao.selectCsByBm(remark);

                if (csId1 == null) {
                    String id = UuidUtil.getInstance().getUUid();
                    csSql.append(" insert into lhjc_cswh(id,cs,remark,yj,jczt,csbm,jclb,csType,cssdValue) values( '");
                    csSql.append(id + "','" + mapData.get("cs") + "','" + mapData.get("remark") + "','" + mapData.get("yj") + "','" + mapData.get("jczt") + "','" + mapData.get("csbm") + "','" + mapData.get("jclb") + "','"+ "P" + "','" + lhjcRemoteBaseService.getDictByDtlKey("CSSD", (String) mapData.get("cs")).getData().getDtlValue() + "')");
                    lhjcDataInsertDao.addBatchData(csSql.toString());
                    csId1 = lhjcDataInsertDao.selectCsByBm(remark);
                }

                if(lhjcDataInsertDao.selectLyCsExist(csId1,lyId)<1){
                    relationSql.append("insert into lhjc_ly_cs(lyId,csId) values('");
                    relationSql.append(lyId + "','" + csId1 + "')");
                    lhjcDataInsertDao.addBatchData(relationSql.toString());
                }
            }

            recordMd5.setCubeId(cube.getCubeId());
            recordMd5.setRecordId(recordId);
            recordMd5.setMd5(MD5Util.getInstance().md5s(data.toString().getBytes()));
            recordMd5s.add(recordMd5);
        }

        zooControl.setBatchId(batchId);
        zooControl.setAddTime(sdf.format(new Date()));
        zooControl.setRecordId("");
        zooControl.setTabelId(cube.getCubeId());
        zooControl.setTableIndex(cube.getCubeId());
        zooControl.setTybm("");
        controlData.add(zooControl);
        lhjcDataInsertDao.addBatchControlData(controlData, batchId, cube.getCubeId());
        lhjcDataCheckDao.batchInsert(recordMd5s);
    }

//	@Override
//	public void addFrData(List<Map<String, Object>> listDataMap, Cube cube, String batchId,Date date,BatchLog batchLog) throws ParameterException, BusinessException {
//		if (listDataMap == null || listDataMap.size() < 1) {
//			return;
//		}
//
//		Set<String> csSet = new HashSet<String>();
//		List<RecordMd5> recordMd5s = new ArrayList<RecordMd5>();
//		List<ZooControl> controlData = new ArrayList<ZooControl>();
//		ZooControl zooControl = new ZooControl();
//
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//		//八位流水号
//		SimpleDateFormat timestamp = new SimpleDateFormat("yyyyMMdd");
//
//		int managerId=batchLog.getManagerId();
//		int deptId=dataInsertDao.selectDeptId(managerId);
//
//		for (Map<String, Object> mapData : listDataMap) {
//			StringBuilder data = new StringBuilder();
//			RecordMd5 recordMd5 = new RecordMd5();
//			Map<String,Object> valueMap= new HashMap<String,Object>();
//
//			String recordId = UuidUtil.getInstance().getUUid();
//			StringBuilder messSql = new StringBuilder();
//			String qymc= (String) mapData.get("qymc");
//			String tyshxydm= (String) mapData.get("tyshxydm");
//			String zzjgdm= (String) mapData.get("zzjgdm");
//			String ywzgbmdjm= (String) mapData.get("ywzgbmdjm");
//			String ysajh= (String) mapData.get("ysajh");
//			Map<String, String> frInfo = dataInsertDao.selectFrInfo(qymc, tyshxydm, zzjgdm, ywzgbmdjm);
//			String lhjcgzbm= (String) mapData.get("lhjcgzbm");
//			Map<String, String> gzInfo = dataInsertDao.selectGzInfo(lhjcgzbm);
//			String ajbh=getAjbh(gzInfo.get("deptcode"),gzInfo.get("sybm"),date);
//
//			messSql.append("insert into lhjc_mess(tybm,is_associated,repairTime,type,jclb,ajbh,gzId,remark,sxsj,ztmc,bm,lrfs,managerId,ysajh) values( '");
//			messSql.append(frInfo.get("tybm")+"','N','"+mapData.get("cfqx")+"','C','");
//			messSql.append(mapData.get("jclb")+"','"+ajbh+"','"+gzInfo.get("id")+"','"+gzInfo.get("cfyy")+"','"+new java.sql.Date(date.getTime())+"','"+frInfo.get("name")+"','"+frInfo.get("tyshxydm")+"','F','"+batchLog.getManagerId()+"','"+ysajh+"')");
//			dataInsertDao.addBatchData(messSql.toString());
//
//			addMessagecenter(gzInfo.get("id"),ajbh,managerId,deptId);
//
//			recordMd5.setCubeId(cube.getCubeId());
//			recordMd5.setRecordId(recordId);
//			recordMd5.setMd5(MD5Util.getInstance().md5s(data.toString().getBytes()));
//			recordMd5s.add(recordMd5);
//
//		}
//
//		StringBuilder syslogSql = new StringBuilder();
//		syslogSql.append("insert into lhjc_opra_log(name,managerId,deptId) values( 'A','");
//		syslogSql.append(managerId+"','"+deptId+"')");
//		dataInsertDao.addBatchData(syslogSql.toString());
//
//		zooControl.setBatchId(batchId);
//		zooControl.setAddTime(sdf.format(new Date()));
//		zooControl.setRecordId("");
//		zooControl.setTabelId(cube.getCubeId());
//		zooControl.setTableIndex(cube.getCubeId());
//		zooControl.setTybm("");
//		controlData.add(zooControl);
//		dataInsertDao.addBatchControlData(controlData, batchId, cube.getCubeId());
////		dataRelateService.addBatchRecord(dbCode, metricCodeSqlBuider.toString(), metricValueSql.toString());
//
//		dataCheckDao.batchInsert(recordMd5s);
//	}
//
//	@Override
//	public void addZrrData(List<Map<String, Object>> listDataMap, Cube cube, String batchId,Date date,BatchLog batchLog) throws ParameterException, BusinessException {
//		if (listDataMap == null || listDataMap.size() < 1) {
//			return;
//		}
//
//		Set<String> csSet = new HashSet<String>();
//		List<RecordMd5> recordMd5s = new ArrayList<RecordMd5>();
//		List<ZooControl> controlData = new ArrayList<ZooControl>();
//		ZooControl zooControl = new ZooControl();
//
//		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//		//八位流水号
//		SimpleDateFormat timestamp = new SimpleDateFormat("yyyyMMdd");
//
//		int managerId=batchLog.getManagerId();
//		int deptId=dataInsertDao.selectDeptId(managerId);
//
//		for (Map<String, Object> mapData : listDataMap) {
//			StringBuilder data = new StringBuilder();
//			RecordMd5 recordMd5 = new RecordMd5();
//			Map<String,Object> valueMap= new HashMap<String,Object>();
//
//			String recordId = UuidUtil.getInstance().getUUid();
//			StringBuilder messSql = new StringBuilder();
//			StringBuilder personSql = new StringBuilder();
//			StringBuilder personUpdateSql=new StringBuilder();
//
//			String glcf="N";
//			String zw="";
//			String frajbh="";
//			if (cube.getCubeId()==1006){
//				glcf= (String) mapData.get("glcf");
//				if(glcf.equals("Y")){
//					zw=(String)mapData.get("zw");
//					frajbh=(String)mapData.get("glfrcfsjbm");
//				}
//			}
//
//			String sfzbm= (String) mapData.get("sfzbm");
//			String zjtype= (String) mapData.get("zjtype");
//			int sfzbmExist = dataInsertDao.selectSfzbmExist(sfzbm);
//			String uuid=UuidUtil.getInstance().getUUid();
//			if(sfzbmExist<1){
//				personSql.append("insert into lhjc_personmess(tybm,name,idcard,position,zjtype) values( '");
//				personSql.append(uuid+"','"+mapData.get("xm")+"','"+mapData.get("sfzbm")+"','"+zw+"','"+zjtype+"')");
//				dataInsertDao.addBatchData(personSql.toString());
//			}
//
//			Map<String, String> zrrInfo = dataInsertDao.selectZrrInfo(sfzbm);
//			if(null==zrrInfo.get("tybm") || zrrInfo.get("tybm").equals("")){
//				zrrInfo.put("tybm",uuid);
//			}
//			if(null==zrrInfo.get("name") || zrrInfo.get("name").equals("")){
//				zrrInfo.put("name", (String) mapData.get("xm"));
//			}
//
//			String position=zrrInfo.get("position")==null ? "":zrrInfo.get("position");
//			if (!zw.equals("") && !zw.equals(position)){
//				personUpdateSql.append("update lhjc_personmess set position='"+zw+"' where idcard='"+sfzbm+"'");
//				dataInsertDao.addBatchData(personUpdateSql.toString());
//			}
//
//			String lhjcgzbm= (String) mapData.get("lhjcgzbm");
//			String ysajh= (String) mapData.get("ysajh");
//			Map<String, String> gzInfo = dataInsertDao.selectGzInfo(lhjcgzbm);
//			String ajbh=getAjbh(gzInfo.get("deptcode"),gzInfo.get("sybm"),date);
//
//			messSql.append("insert into lhjc_mess(tybm,is_associated,repairTime,type,jclb,ajbh,gzId,remark,sxsj,ztmc,glcf,bm,lrfs,managerId,ysajh) values( '");
//			messSql.append(zrrInfo.get("tybm")+"','"+glcf+"','"+mapData.get("cfqx")+"','P','");
//			messSql.append(mapData.get("jclb")+"','"+ajbh+"','"+gzInfo.get("id")+"','"+gzInfo.get("cfyy")+"','"+new java.sql.Date(date.getTime())+"','"+zrrInfo.get("name")+"','"+frajbh+"','"+zrrInfo.get("idcard")+"','F','"+batchLog.getManagerId()+"','"+ysajh+"')");
//			dataInsertDao.addBatchData(messSql.toString());
//
//			if(glcf.equals("Y")){
//				StringBuilder updateGlcfSql = new StringBuilder();
//				String glcfInfo=dataInsertDao.selectGlcfInfo((String) mapData.get("glfrcfsjbm"));
//				if(null!=glcfInfo && !glcfInfo.equals("")){
//					glcfInfo=glcfInfo+","+ajbh;
//				}else {
//					glcfInfo=ajbh;
//				}
//				updateGlcfSql.append("update lhjc_mess set is_associated='Y',glcf='"+glcfInfo+"' where ajbh='"+mapData.get("glfrcfsjbm")+"'");
//				dataInsertDao.addBatchData(updateGlcfSql.toString());
//			}
//
//			addMessagecenter(gzInfo.get("id"),ajbh,managerId,deptId);
//
//			recordMd5.setCubeId(cube.getCubeId());
//			recordMd5.setRecordId(recordId);
//			recordMd5.setMd5(MD5Util.getInstance().md5s(data.toString().getBytes()));
//			recordMd5s.add(recordMd5);
//
//		}
//
//		StringBuilder syslogSql = new StringBuilder();
//		syslogSql.append("insert into lhjc_opra_log(name,managerId,deptId) values( 'A','");
//		syslogSql.append(managerId+"','"+deptId+"')");
//		dataInsertDao.addBatchData(syslogSql.toString());
//
//		zooControl.setBatchId(batchId);
//		zooControl.setAddTime(sdf.format(new Date()));
//		zooControl.setRecordId("");
//		zooControl.setTabelId(cube.getCubeId());
//		zooControl.setTableIndex(cube.getCubeId());
//		zooControl.setTybm("");
//		controlData.add(zooControl);
//		dataInsertDao.addBatchControlData(controlData, batchId, cube.getCubeId());
////		dataRelateService.addBatchRecord(dbCode, metricCodeSqlBuider.toString(), metricValueSql.toString());
//
//		dataCheckDao.batchInsert(recordMd5s);
//	}
//
//	public String getAjbh(String deptCode,String sybm,Date date){
//		//八位流水号
//		String ajbh="";
//		SimpleDateFormat timestamp = new SimpleDateFormat("yyyyMMdd");
//
//		synchronized (DataInsertServiceImpl.class){
//			Map<String, String> ajbhRecord = dataInsertDao.selectAjbhRecord("ajbh");
//
//			if(!ajbhRecord.get("datetime").equals(timestamp.format(date))){
//				dataInsertDao.modifyAjbhRecord(ajbhRecord.get("id"), timestamp.format(date), 1);
//				ajbhRecord.put("datetime",timestamp.format(date));
//				ajbhRecord.put("count",1+"");
//			}else{
//				int realCount=Integer.parseInt(ajbhRecord.get("count"))+1;
//				dataInsertDao.modifyAjbhRecord(ajbhRecord.get("id"), timestamp.format(date), realCount);
//				ajbhRecord.put("count",realCount+"");
//			}
//
//			//编号生成
//			ajbh=deptCode+sybm+ajbhRecord.get("datetime");
//			for(int i=((String) ajbhRecord.get("count")).length();i<3;i++){
//				ajbh=ajbh+"0";
//			}
//
//			ajbh=ajbh+ajbhRecord.get("count");
//		}
//
//		return ajbh;
//	}
//
//	public void addMessagecenter(String gzId,String ajbh,int operatorId,int operatorDeptId){
//		Integer mbId=dataInsertDao.selectMbId("G");
//		if(null==mbId){
//			return;
//		}
//
//		List<Integer>list=dataInsertDao.selectDeptIdList(Integer.parseInt(gzId));
//		StringBuilder messageCenterSql = new StringBuilder();
//		HashSet h = new HashSet(list);
//		list.clear();
//		list.addAll(h);
//		int count=0;
//		int total=0;
//		if(list.contains(-1)){
//			List<HashMap<String, Integer>> managerList = dataInsertDao.selectManagerListByDeptId(-1);
//
//			for(int i=0;i<managerList.size();i++){
//				if(count==0){
//					messageCenterSql.append("insert into lhjc_messagecenter(name,type,mbId,manegerId,dept_Id,ajbh,operatorId,operatorDeptId) value ");
//				}
//
//				messageCenterSql.append("('G','G','"+mbId+"','"+managerList.get(i).get("mId")+"','"+managerList.get(i).get("deptId")+"','"+ajbh+"','"+operatorId+"','"+operatorDeptId+"'),");
//				count++;
//				total++;
//
//				if(count==500 || total==managerList.size()-1){
//					messageCenterSql.append("('G','G','"+mbId+"','"+managerList.get(i).get("mId")+"','"+managerList.get(i).get("deptId")+"','"+ajbh+"','"+operatorId+"','"+operatorDeptId+"')");
//					dataInsertDao.addBatchData(messageCenterSql.toString());
//					messageCenterSql = new StringBuilder();
//					count=0;
//				}
//			}
//		}else{
//			for(Integer deptId:list){
//				List<HashMap<String, Integer>> managerList = dataInsertDao.selectManagerListByDeptId(deptId);
//
//				for(int i=0;i<managerList.size();i++){
//					if(count==0){
//						messageCenterSql.append("insert into lhjc_messagecenter(name,type,mbId,manegerId,dept_Id,ajbh,operatorId,operatorDeptId) value ");
//					}
//
//					messageCenterSql.append("('G','G','"+mbId+"','"+managerList.get(i).get("mId")+"','"+managerList.get(i).get("deptId")+"','"+ajbh+"','"+operatorId+"','"+operatorDeptId+"'),");
//					count++;
//					total++;
//
//					if(count==500 || total==managerList.size()-1){
//						messageCenterSql.append("('G','G','"+mbId+"','"+managerList.get(i).get("mId")+"','"+managerList.get(i).get("deptId")+"','"+ajbh+"','"+operatorId+"','"+operatorDeptId+"')");
//						dataInsertDao.addBatchData(messageCenterSql.toString());
//						messageCenterSql = new StringBuilder();
//						count=0;
//						total=0;
//					}
//				}
//			}
//		}
//
//	}

}
